package hotel.dao;

import java.util.LinkedList;

import hotel.tipos.Apartamento;
import hotel.util.HibernateUtil;

import org.hibernate.Query;
import org.hibernate.Session;

public class ApartamentoDao {
	public static int create(Apartamento ap){
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
				
				session.beginTransaction();

		        Integer id = (Integer) session.save(ap);
		        
		        session.getTransaction().commit();
		        
		        return id.intValue();
			}
	
	@SuppressWarnings("unchecked")
	public static LinkedList<Apartamento> listarApartamentos() {
		// Cria uma sessão
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		// inicia a transação
		session.beginTransaction();
		// Cria uma lista para retornar
		LinkedList<Apartamento> apartamentos = null;
		
		try{
			apartamentos = new LinkedList<Apartamento>(session.createQuery("from Apartamento").list());
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		return apartamentos;
	}
	
	/**
	 * Busca um apartamento pelo numero
	 * @param num Número do apartamento a ser localizado
	 * @return apartamento localizado ou null caso contrário
	 */
	public static Apartamento apartamentoNumero(int num){
		// Cria uma sessão
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		// inicia a transação
		session.beginTransaction();
		String query = new String("select a from Apartamento a where a.numero = :num");
		Query q = session.createQuery(query);
		q.setInteger("num", new Integer(num));

		try {
			Apartamento ap = (Apartamento)q.list().get(0);
			return ap;
		} catch (IndexOutOfBoundsException ie){
			return null;
		}
		
		
	}
}
